package com.hsnn.medstgmini.pro.base.service.Impl;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.annotation.Resource;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import com.hsnn.medstgmini.Constants;
import com.hsnn.medstgmini.base.dict.model.DicSys;
import com.hsnn.medstgmini.base.dict.model.form.DicAreaForm;
import com.hsnn.medstgmini.base.dict.service.DicAreaManager;
import com.hsnn.medstgmini.base.std.dao.StdDrugInfoDao;
import com.hsnn.medstgmini.base.std.model.form.StdCompInfoForm;
import com.hsnn.medstgmini.base.std.service.StdCompinfoManager;
import com.hsnn.medstgmini.base.std.service.StdDrugQualitySpecManager;
import com.hsnn.medstgmini.base.std.service.StdHealthbureauManager;
import com.hsnn.medstgmini.base.std.service.StdProdDrugInfoManager;
import com.hsnn.medstgmini.model.Status;
import com.hsnn.medstgmini.pro.base.dao.BaseGoodsDao;
import com.hsnn.medstgmini.pro.base.model.BaseDelrelation;
import com.hsnn.medstgmini.pro.base.model.BaseGoods;
import com.hsnn.medstgmini.pro.base.model.form.BaseDelrelationForm;
import com.hsnn.medstgmini.pro.base.model.form.FileUploadResult;
import com.hsnn.medstgmini.pro.base.service.BaseGoodsManager;
import com.hsnn.medstgmini.pro.project.dao.BidProjectDao;
import com.hsnn.medstgmini.pro.project.model.BidProject;
import com.hsnn.medstgmini.pro.project.model.BidProjectDetails;
import com.hsnn.medstgmini.pro.project.service.BidProjectManager;
import com.hsnn.medstgmini.sys.model.SysImportFileInfo;
import com.hsnn.medstgmini.sys.model.SysUser;
import com.hsnn.medstgmini.sys.model.form.SysImportFileInfoForm;
import com.hsnn.medstgmini.sys.service.SysImportFileInfoManager;
import com.hsnn.medstgmini.trading.pur.model.form.DrugNoJNoX;
import com.hsnn.medstgmini.util.ConstantsUtil;
import com.hsnn.medstgmini.util.DateUtil;
import com.hsnn.medstgmini.util.DicSysUtil;
import com.hsnn.medstgmini.util.ExcelUtil;
import com.hsnn.medstgmini.util.Pagination;
import com.hsnn.medstgmini.util.ParseDate;
import com.hsnn.medstgmini.util.ParseNumber;
import com.hsnn.medstgmini.validator.ValidatorUtil;

@Service("baseGoodsManager")
public class BaseGoodsManagerImpl implements BaseGoodsManager {
	@Autowired
	private BaseGoodsDao baseGoodsDao;
	@Autowired
	private BidProjectDao bidProjectDao;
	@Autowired
	private StdDrugInfoDao stdDrugInfoDao;
	@Autowired
	private BidProjectManager bidProjectManager;
	@Autowired
	private StdProdDrugInfoManager stdProdDrugManager;
	@Autowired
	private StdDrugQualitySpecManager stdQualityManager;
	@Autowired
	private SysImportFileInfoManager sfmanager;
	@Value("#{sysProp['system.uploadPath']}")
	private String uploadPath;
	@Value("#{sysProp['system.importGoodsPath']}")
	private String importGoodsPath;
	@Value("#{sysProp['system.importGoodsResultPath']}")
	private String importGoodsResultPath;
	@Autowired
	private StdDrugQualitySpecManager stdqulityManager;
	@Autowired
	private StdCompinfoManager compManager;
	@Autowired
	private StdHealthbureauManager healthbureauManager;
	@Value("#{sysProp['system.province']}")
    private String sysProvince;
	@Autowired
	private DicAreaManager areaManager;
	
	@Resource(name = "sessionFactory")
	private SessionFactory factory; 
	
	private static final Logger logger = LoggerFactory.getLogger(BaseGoodsManagerImpl.class);
	/**
	 * 
	 *@category 跳转到商品列表页面
	 *@author 邱磊
	 *@date 2015年6月17日 下午8:52:48
	 *@param form
	 *@return
	 */
	public Pagination getDataList(Pagination page) {
		page = baseGoodsDao.getDataList(page);
		return page;
	}
	
	/**
	 * @category 卫生局查看商品目录
	 * @date 2015年11月16日
	 * @param page
	 * @return
	 */
	public Pagination getGoodsListByWSJ(Pagination page, SysUser loginUser) {
		return baseGoodsDao.getGoodsListByWSJ(page, loginUser);
	}
	
	/**
	 * 
	 *@category 根据商品编码查询商品信息
	 *@author 邱磊
	 *@date 2015年6月17日 下午9:06:42
	 *@param goodsCode
	 *@return
	 */
	@Override
	public Map<String, Object> getBaseGoodsByCode(String goodsCode) {
		Map<String, Object> data= baseGoodsDao.getBaseGoodsByCode(goodsCode);
		return data;
	}
	/**
	 * 
	 *@category 启用停用
	 *@author 邱磊
	 *@date 2015年6月17日 下午8:53:29
	 *@param goodsCode 商品码
	 *@param status 1：启用，0：停用
	 *@return
	 */
	@Transactional
	public void switchStatus(String goodsCode, Short status, String updUser) {
		baseGoodsDao.switchStatus(goodsCode, status, updUser);
	}
	/**
	 * 
	 *@category 批量启用停用
	 *@author 邱磊
	 *@date 2015年6月17日 下午8:54:03
	 *@param list 需要启用、停用的数据
	 *@return
	 */
	@Transactional
	public void batchSwitchStatus(List<BaseGoods> list) {
		baseGoodsDao.batchSwitchStatus(list);
	}
	/**
	 * 
	 *@category 新增商品
	 *@author 邱磊
	 *@date 2015年6月17日 下午8:54:37
	 *@param data
	 *@return
	 */
	@Transactional
	public void addData(BaseGoods data) {
		baseGoodsDao.addData(data);
	}
	/**
	 * 
	 *@category 上传商品导入文件
	 *@author 邱磊
	 *@date 2015年11月13日 下午3:53:45
	 *@param
	 */
	public FileUploadResult uploadFile(MultipartFile goodFile,Pagination page){
		SysUser user = (SysUser) page.getForm();
		String fileRealname = goodFile.getOriginalFilename();
		FileUploadResult result = new FileUploadResult();
		String fileUploadname = String.valueOf(ParseDate.parseWithNum(new Date()))+fileRealname.substring(fileRealname.lastIndexOf("."),fileRealname.length());
			try {
				FileUtils.copyInputStreamToFile(goodFile.getInputStream(), new File(uploadPath + importGoodsPath, fileUploadname));
			} catch (Exception e) {
				logger.error("文件上传失败:", e);
				result.setResult("文件上传失败！");
				return result;
			}
			File file=new File(uploadPath + importGoodsResultPath);    
			if(!file.exists())    
			{    
			    try {    
			        file.mkdirs();    
			    } catch (Exception e) {    
			        logger.error("创建商品导入结果文件夹失败：", e);
			        result.setResult("创建商品导入结果文件夹失败！");
			        return result;
			    }    
			} 
			SysImportFileInfoForm info = new SysImportFileInfoForm();
			info.setId(UUID.randomUUID().toString());
			info.setFileName(fileUploadname);
			info.setFileOrginalName(fileRealname);
			info.setProjId(page.getConditions().get("projId"));
			info.setFileType(Constants.WENJIAN_SHANGCHUAN_SHANGPING_DAORU);
			info.setUserId(user.getId());
			info.setFilePath(importGoodsPath);
			info.setCheckFilePath(importGoodsResultPath);
			info.setUpdUser(user.getId());
			sfmanager.addImportFile(info);
			result.setFileId(info.getId());
			result.setResult("上传成功，后台正在执行药品导入，请稍后查看导入结果！");
			return result;
	}
	
	
	@SuppressWarnings({ "unused", "unchecked" })
	public void bathImport(String fileId,SysUser user) throws FileNotFoundException {
		Long rstart = System.currentTimeMillis();
		SysImportFileInfo info = sfmanager.getImportFileById(fileId);
		FileInputStream fileInputStream = new FileInputStream(new File(uploadPath + importGoodsPath + info.getFileName()));
		List<Map<String, String>> list = ExcelUtil.readExcelFile(fileInputStream,info.getFileName(), 0);//读取excel里所有的内容
		if (null != fileInputStream){
			try {
				fileInputStream.close();
			} catch (IOException e) {
				logger.error("商品批量导入文件流关闭：", e);
			}
		}
		
		List<Map<String, String>> resultList = new ArrayList<Map<String, String>>();
		List<Map<String, String>> errorList = new ArrayList<Map<String, String>>();
		boolean errorFlag = false;
		try {
		if (null == list || list.size() < 2){
			sfmanager.updateImportFileStatus(Constants.WENJIAN_STATUS_JIAOYANBUTONGGUO, info.getId());
		} else {
			sfmanager.updateImportFileStatus(Constants.WENJIAN_STATUS_JIAOYANZHONG, fileId);
			for (int i = 1; i < list.size(); i++){
				Map<String, String> map = list.get(i);
				StringBuffer msg = new StringBuffer("");
				String projName = map.get("1");
				String drugCat = map.get("2");
				String drugName = map.get("3");
				String formName = map.get("4");
				String specName = map.get("5");
				String factor = map.get("6");
				String unit = map.get("7");
				String materialName = map.get("8");
				String compName = map.get("9");
				String catCompName = map.get("10");
				String price = map.get("11");
				String maxPrice = map.get("12");
				String hangPrice = map.get("13");
				String refPrice = map.get("14");
				String healthcarePrice = map.get("15");
				String pricUrl = map.get("16");
				String picShortUrl = map.get("17");
				String areaName = map.get("18");
				Map<String, Object> proj = null;
				BidProjectDetails detail = null;
				Map<String, Object> area = null;
				Map<String, Object> quality = null;
				Map<String, Object> drug = null;
				Map<String, Object> compmap = null;
				if (!StringUtils.isNotBlank(projName)){//判断项目名称是否为空（1）---项目名称为空
					msg.append("项目名称不能为空，");
				} else {//项目名称不为空（1）
					List<Map<String, Object>> plist = bidProjectManager.getProjByName(projName);//根据项目名称获取项目信息
					if (null != plist && plist.size() > 0){//判断项目在表中是否存在（2）---项目名称存在
						proj = plist.get(0);
						if (proj.get("status") != null && "1".equals(proj.get("status").toString())){//判断项目状态是否有效（3）---项目状态有效
							detail = bidProjectManager.getProjDetail(proj.get("proj_id").toString());//根据项目ID获取项目详情信息
							if (ParseDate.fromShortFormat(ParseDate.parseShortFormat(detail.getProjEndtime())).getTime() > ParseDate.fromShortFormat(ParseDate.parseShortFormat(new Date())).getTime()){//判断项目的招标是否结束（4）---招标未结束
								msg.append("项目招标未结束，");
							} else {//招标结束
								if (ParseDate.fromShortFormat(proj.get("endtime").toString()).getTime() < ParseDate.fromShortFormat(ParseDate.parseShortFormat(new Date())).getTime()){//判断项目的采购时间是否结束（5）--采购时间结束
									msg.append("项目采购日期已结束，");
								} else {//项目采购日戎未结束
									if (StringUtils.isBlank(drugName)){//判断通用名是否为空（6）--通用名为空
										msg.append("通用名不能为空，");
									}
									if (StringUtils.isBlank(formName)){//判断剂型是否为空（7）--剂型为空
										msg.append("剂型不能为空，");
									}
									if (StringUtils.isBlank(specName)){//判断规格是否为空（8）--规格为空
										msg.append("规格不能为空，");
									}
									List<Map<String, Object>> qualitylist = stdqulityManager.getQualityspec(drugName, formName, specName);//根据通用名，剂型，规格获取品规信息
									if (null != qualitylist && qualitylist.size() > 0){//判断品规是否存在（9）---品规信息存在
										quality = qualitylist.get(0);
										if (null != quality.get("status") && "1".equals(quality.get("status").toString())){//判断品规的状态是否有效（10）---有效
											if (StringUtils.isBlank(factor)){//转换系数是否为空（11）--转换系数为空
												msg.append("转换系数不能为空，");
											}
											if (StringUtils.isBlank(unit)){//判断单位是否为空（12）--单位为空
												msg.append("单位不能为空，");
											}
											if (StringUtils.isBlank(materialName)){//判断材质是否为空（13）--材质为空
												msg.append("材质不能为空，");
											}
											List<Map<String, Object>> dlist = bidProjectDao.getProddruginfo(quality.get("qualityspec_id").toString(), factor, unit, materialName, compName);//根据品规ID，转换系数，包装单位，材质，生产企业查询药品信息
											if (null != dlist && dlist.size() > 0){//判断药品是否存在（14）---药品存在
												drug = dlist.get(0);
												if (null != drug.get("status") && "1".equals(drug.get("status").toString())){//判断药品的状态是否有效（15）---药品状态有效
													List<?> pdlist = bidProjectManager.getPorjDrug(proj.get("proj_id").toString(),drug.get("drug_code").toString());//根据项目Id，药品编码查询药品是否在项目的招标中
													if (null != pdlist && pdlist.size() > 0){//判断药品是否在项目招标目录中（16）---药品在项目招标目录中
														Map<String, Object> pdmap = (Map<String, Object>) pdlist.get(0);
														if (null == pdmap.get("status") || !"1".equals(pdmap.get("status").toString())){//判断药品在招标目录中是否有效（17）---药品在招标目录中状态无效
															msg.append("药品在招标目录中状态无效，");
														}
													} else {
														msg.append("药品不在招标目录中，");
													}
												} else {
													msg.append("药品状态无效，");
												}
											} else {
												msg.append("药品不存在，");
											}
											if (StringUtils.isNotBlank(catCompName)){//判断投标企业是否为空（18）---不为空
												List<Map<String, Object>> complist = compManager.getCompByName(catCompName);//根据投标企业名称查询企业信息
												if (null != complist && complist.size() > 0){//判断投标企业是否存在（19）---投标企业存在
													compmap = complist.get(0);
													if (null == compmap.get("status") || !"1".equals(compmap.get("status").toString())){//判断投标企业状态是否有效（20）---投标企业无效
														msg.append("投标企业状态无效，");
													}
												} else {
													msg.append("投标企业不存在，");
												}
											} else {
												msg.append("投标企业不能为空，");
											}
											if (StringUtils.isNotBlank(price)){//判断采购限价是否为空（21）---不为空
												if (!ValidatorUtil.validatePositiveNumeric(price)){//判断采购限价是否是数值型
													msg.append("采购限价请大于0的正数，");
												}
											} else {
												msg.append("采购限价不能为空，");
											}
											if (StringUtils.isNotBlank(maxPrice)){//判断最高零售价是否为空（22）---不为空
												if (!ValidatorUtil.validatePositiveNumeric(maxPrice)){
													msg.append("最高零售价请大于0的正数，");
												}
											} else {
												msg.append("最高零售价不能为空，");
											}
											if (StringUtils.isNotBlank(hangPrice)){//判断挂牌价是否为空（23）---不为空
												if (!ValidatorUtil.validatePositiveNumeric(hangPrice)){
													msg.append("挂牌价请大于0的正数，");
												}
											} 
											if (StringUtils.isNotBlank(refPrice)){//判断参考价是否为空（24）---不为空
												if (!ValidatorUtil.validatePositiveNumeric(refPrice)){
													msg.append("参考价请大于0的正数，");
												}
											}
											if (StringUtils.isNotBlank(healthcarePrice)){//判断医保支付价是否为空（25）---不为空
												if (!ValidatorUtil.validatePositiveNumeric(healthcarePrice)){
													msg.append("医保支付价请大于0的正数，");
												}
											}
											if (StringUtils.isNotBlank(areaName)){//判断地区是否为空（26）---不为空
												if (Constants.HSZX == user.getType()){//判断用户是否是卫生局（27）---是卫生局
													Map<String, Object> hmap = healthbureauManager.getHealthBureauByOrgId(user.getOrgId());//根据机构ID获取生局的机构信息
													String harea = hmap.get("area_id").toString();
													if (harea.lastIndexOf("00") == 4){
														harea = harea.substring(0,harea.lastIndexOf("00"));
														if (harea.lastIndexOf("00") == 2){
															harea = harea.substring(0,harea.lastIndexOf("00"));
														}
													}
													List<Map<String, Object>> walist = areaManager.getAreaInfoByName(harea, areaName);//根据卫生局地区和地区名称查询地区信息
													if (null != walist && walist.size() > 0){//判断地区是否为空（28）---不为空
														Map<String, Object> wamap = walist.get(0);
														if (null != wamap.get("status") && "1".equals(wamap.get("status").toString())){//判断地区是否有效（29）---地区有效
															area = wamap;
														} else {
															msg.append("地区状态无效，");
														}
													} else {
														msg.append("地区名不正确，");
													}
												} else {
													List<Map<String, Object>> zalist = areaManager.getAreaInfoByName(sysProvince.substring(0,2), areaName);//根据省份和地区名称查询地区信息
													if (null != zalist && zalist.size() > 0){//判断地区是否为空（30）---不为空
														Map<String, Object> zamap = zalist.get(0);
														if (null != zamap.get("status") && "1".equals(zamap.get("status").toString())){//判断地区是否有效（31）---地区有效
															area = zamap;
														} else {
															msg.append("地区状态无效，");
														}
													} else {
														msg.append("地区名不正确，");
													}
												}
											}
											
										} else {
											msg.append("商品品规状态无效，");
										}
									} else {
										msg.append("商品品规信息不存在，");
									}
								}
							}
						} else {//项目状态无效
							msg.append("项目状态无效，");
						}
						if (StringUtils.isNotBlank(drugCat)){
							String dcat = baseGoodsDao.getSysDicValue(drugCat);
							if (!StringUtils.isNotBlank(dcat)){
								msg.append("项目分类不正确，");
							}
						}
					} else {//项目不存在
						msg.append("项目名称不存在，");
					}
				}
				
				if (StringUtils.isNotBlank(msg)){
					errorFlag = true;
				} else {
					Map<String, String> paramMap = new HashMap<String, String>();
					paramMap.put("projId", proj.get("proj_id").toString());
					if (null != area){
						paramMap.put("areaId", area.get("area_id").toString());
					}
					paramMap.put("qualityId", quality.get("qualityspec_id").toString());
					paramMap.put("drugCode", drug.get("drug_code").toString());
					paramMap.put("catCompCode", compmap.get("comp_code").toString());
					paramMap.put("proPriceLimit", price);
					List<?> rlist = baseGoodsDao.getHaveGoodsInfo(paramMap,detail);
					if (null != rlist && rlist.size() > 0){
						msg.append("项目中已存在该商品，");
					} else {
						List<?> wrlist = baseGoodsDao.getWaitGoodsInfo(paramMap, detail, fileId);
						if (null != wrlist && wrlist.size() > 0){
							msg.append("商品在文件中重复，");
						}
					}
				}
				map.put(String.valueOf(list.get(0).size() + 1), msg.substring(0, msg.length() == 0 ? 0 : msg.length() - 1));
				resultList.add(map);
				if (!StringUtils.isNotBlank(msg.toString())){
					baseGoodsDao.addImportGoods(proj, drug, quality, area, compmap, map, info);
				} else {
					errorFlag = true;
				}
			}
		}
		FileOutputStream os = new FileOutputStream(uploadPath + importGoodsResultPath + info.getFileName() );
		Pagination page = new Pagination();
		String[] header = null;
		String[] alias = null;
		if (null != list && list.size() > 0){
			Map<String, String> head = list.get(0);
			header = new String[head.size()+1];
			alias = new String[head.size()+1];
			for (int i = 0; i < head.size(); i++){
				header[i] = head.get(String.valueOf(i+1));
				alias[i] = String.valueOf(i+1);
			}
			header[head.size()] = "校验信息";
			alias[head.size()] = String.valueOf(head.size()+1);
			if (null == resultList || resultList.size() < 1){
				Map<String, String> nmap = new HashMap<String, String>();
				for (int i = 0; i < head.size(); i++){
					nmap.put(String.valueOf(i+1), "");
				}
				nmap.put(String.valueOf(head.size()+1), "文件内容为空");
				resultList.add(nmap);
				errorFlag = true;
			}
		} else {
			header = new String[]{"校验信息"};
			alias = new String[]{"1"};
			Map<String, String> nmap = new HashMap<String, String>();
			nmap.put("1", "文件内容为空");
			resultList.add(nmap);
			errorFlag = true;
		}
		page.setRows(resultList);
		ExcelUtil.exportExcel(page, os, "校验结果", header, alias);
		if (errorFlag){
			sfmanager.updateImportFileStatus(Constants.WENJIAN_STATUS_JIAOYANBUTONGGUO, fileId);
		} else {
			sfmanager.updateImportFileStatus(Constants.WENJIAN_STATUS_JIAOYANTONGGUO, fileId);
		}
		if (null != os){
			try {
				os.close();
			} catch (IOException e) {
				logger.error("商品导入文件结果流：", e);
			}
		}
		
		} catch (Exception e) {
			e.printStackTrace();
			sfmanager.updateImportFileStatus(Constants.WENJIAN_STATUS_JIAOYANYICHANG, fileId);
			baseGoodsDao.deleteImportGoods(fileId);
			
		}
	}
	
	
	private boolean checkDrugCat(String catName){
		List<DicSys> dslist = DicSysUtil.getDicListByClassCode(Constants.QUALITYSPEC_CLASS);
		boolean flag = false;
		for (int i = 0; i < dslist.size(); i++){
			DicSys data = dslist.get(i);
			if (catName.equals(data.getDicName())){
				flag = true;
				break;
			}
		}
		return flag;
	}
	
	
	/**
	 * 
	 *@category 批量导入
	 *@author 邱磊
	 *@date 2015年6月17日 下午8:55:31
	 *@param list 有效数据List
	 *@return
	 */
	@Transactional
	public void bathImport(List<BaseGoods> list) {
		baseGoodsDao.bathImport(list);
	}
	/**
	 * 
	 *@category 封装商品信息
	 *@author 邱磊
	 *@date 2015年6月17日 下午9:13:26
	 *@param list
	 *@return
	 */
	public List<BaseGoods> formateData(List<Object[]> list) {
		List<BaseGoods> flist = new ArrayList<BaseGoods>();
		if (null != list && list.size() > 0) {
			for (int i = 0; i < list.size(); i++) {
				Object[] obj = list.get(i);
				BaseGoods form = new BaseGoods();
				form.setGoodsCode(obj[0] == null ? "" : obj[0].toString());
				form.setDrugName(obj[1] == null ? "" : obj[1].toString());
				form.setFormName(obj[2] == null ? "" : obj[2].toString());
				form.setSpecName(obj[3] == null ? "" : obj[3].toString());
				form.setFactor(obj[4] == null ? "" : obj[4].toString());
				form.setUnit(obj[5] == null ? "" : obj[5].toString());
				form.setMaterialName(obj[6] == null ? "" : obj[6].toString());
				form.setCompName(obj[7] == null ? "" : obj[7].toString());
				form.setDrugCode(obj[8] == null ? "" : obj[8].toString());
				form.setProPriceLimit(obj[9] == null ? null : obj[9].toString()
						.trim().equals("") ? null : Double.valueOf(obj[9]
						.toString()));
				form.setProjectName(obj[10] == null ? "" : obj[10].toString());
				form.setDrugCat(obj[11] == null ? "" : obj[11].toString());
				form.setDrugCatText(obj[11] == null ? "" : DicSysUtil.getValueByClassCodeAndDicCode(Constants.DRUG_CAT, obj[11].toString()));
				form.setStatusText(obj[12] == null ? "" : obj[12].toString()
						.trim().equals("") ? "" : Status.getName(Integer
						.valueOf(obj[12].toString())));
				form.setDrugId(obj[13] == null ? "" : obj[13].toString());
				form.setProdPompId(obj[14] == null ? "" : obj[14].toString());
				form.setRetailPriceLimit(obj[15] == null ? null : obj[15].toString().trim().equals("") ? null : Double.valueOf(obj[15].toString()));
				form.setBakDrugFlagText("" + obj[16]);
				form.setIsLongTimePlanText(obj[17] == null ? "" : DicSysUtil.getValueByClassCodeAndDicCode(Constants.BAK_PURCHASE_CAT, obj[17].toString()));
				flist.add(form);
			}
		}
		return flist;
	}


	/**
	 * 
	 *@category 查询所有的商品列表
	 *@author 邱磊
	 *@date 2015年6月17日 下午9:15:04
	 *@return
	 */
	@Override
	public List<BaseGoods> getBaseGoodsList() {
		return baseGoodsDao.getBaseGoodsList();
	}

	/**
	 * 
	 *@category 查询所有标准库药品
	 *@author 邱磊
	 *@date 2015年6月17日 下午9:15:20
	 *@return
	 */
	@Override
	public List<Object[]> getStdDrugList() {
		return baseGoodsDao.getStdDrugList();
	}

	/**
	 * 
	 *@category 查询所有项目
	 *@author 邱磊
	 *@date 2015年6月17日 下午9:15:37
	 *@return
	 */
	@Override
	public List<BidProject> getBidProjectList() {
		return baseGoodsDao.getBidProjectList();
	}
	/**
	 * 
	 *@category 查询所有商品分类字典信息
	 *@author 邱磊
	 *@date 2015年6月17日 下午9:16:08
	 *@return
	 */
	@Override
	public List<DicSys> getDicSysList() {
		return baseGoodsDao.getDicSysList();
	}
	/**
	 * 
	 *@category 获取生产企业设置商品配送关系列表
	 *@author 邱磊
	 *@date 2015年6月17日 上午11:06:06
	 *@param page
	 *@return
	 */
	public Pagination getProDelDrugDataList(Pagination page){
		page = baseGoodsDao.getProDelDrugDataList(page);
		return page;
	}
	/**
	 * 
	 *@category 根据区域设置配送企业列表
	 *@author 邱磊
	 *@date 2015年6月17日 下午4:22:16
	 *@return
	 */
	public Pagination getBaseGoodsDelByAreaList(Pagination page){
		page = baseGoodsDao.getBaseGoodsDelByAreaList(page);
		return page;
	}
	
	/**
	 * 
	 * @category 根据区域设置配送企业列表
	 * @author 邱磊
	 * @date 2015年6月17日 下午4:22:16
	 * @return
	 */
	@Override
	public Pagination getBaseGoodsDelByLinxuan(Pagination page) {
		return baseGoodsDao.getBaseGoodsDelByLinxuan(page);
	}
	/**
	 * 
	 *@category 根据区域设置配送企业
	 *@author 邱磊
	 *@date 2015年6月17日 下午4:58:22
	 *@param list
	 *@return
	 */
	@Transactional
	public void setDelByArea(List<BaseDelrelation> list, Map<String, String> map){
		baseGoodsDao.setDelByArea(list, map);
	}
	/**
	 * 
	 *@category 根据配送企业设置区域
	 *@author 邱磊
	 *@date 2015年6月17日 下午4:58:22
	 *@param list
	 *@return
	 */
	@Transactional
	public void setDelByComp(List<BaseDelrelation> list, Map<String, String> map){
		baseGoodsDao.setDelByComp(list, map);
	}
	/**
	 * 
	 *@category 解除已设置配送企业
	 *@author 邱磊
	 *@date 2015年6月17日 下午4:58:22
	 *@param list
	 *@return
	 */
	@Transactional
	public void removeDel(Pagination page){
		baseGoodsDao.removeDel(page);
	}
	/**
	 * 
	 *@category 根据企业设置配送区域的区域
	 *@author 邱磊
	 *@date 2015年6月17日 下午8:55:56
	 *@param page 
	 *@return
	 */
	@Override
	public Pagination getAreaList(Pagination page) {
		page = baseGoodsDao.getAreaList(page);
		return page;
	}
	
	/**
	 * 
	 * @category 根据企业设置配送区域的区域
	 * @author 邱磊
	 * @date 2015年6月17日 下午8:55:56
	 * @param page
	 * @return
	 */
	@Override
	public Pagination getAreaListByLinxuan(Pagination page) {
		return baseGoodsDao.getAreaListByLinxuan(page);
	}
	/**
	 * 
	 *@category 查询当前生产企业的所有药品配送关系
	 *@author 邱磊
	 *@date 2015年6月18日 上午9:59:52
	 *@param page
	 *@return
	 */
	public Pagination getBaseDelByCompList(Pagination page){
		page = baseGoodsDao.getBaseDelByCompList(page);
		return page;
	}
	@SuppressWarnings("unchecked")
	public Pagination getBaseDelCentreByCompList(Pagination page){
		page = baseGoodsDao.getBaseDelCentreByCompList(page);
		page.setRows(formateCenterDel((List<Object[]>) page.getRows()));
		return page;
	}
	
	
	
	private List<BaseGoods> formateCenterDel(List<Object[]> list){
		List<BaseGoods> flist = new ArrayList<BaseGoods>();
		if (null != list && list.size() > 0){
			for (int i = 0; i < list.size(); i++){
				Object[] obj = list.get(i);
				BaseGoods data = new BaseGoods();
				data.setDelRelId(obj[0]==null?"":obj[0].toString());
				data.setProjectName(obj[1]==null?"":obj[1].toString());
				data.setGoodsCode(obj[2]==null?"":obj[2].toString());
				data.setDrugCode(obj[3]==null?"":obj[3].toString());
				data.setDrugName(obj[4]==null?"":obj[4].toString());
				data.setFormName(obj[5]==null?"":obj[5].toString());
				data.setSpecName(obj[6]==null?"":obj[6].toString());
				data.setFactor(obj[7]==null?"":obj[7].toString());
				data.setUnit(obj[8]==null?"":obj[8].toString());
				data.setMaterialName(obj[9]==null?"":obj[9].toString());
				data.setCompName(obj[10]==null?"":obj[10].toString());
				data.setProdPompId(obj[11]==null?"":obj[11].toString());
				data.setAreaName(obj[12]==null?"":obj[12].toString());
				data.setDelCompName(obj[13]==null?"":obj[13].toString());
				data.setDelCompId(obj[14]==null?"":obj[14].toString());
				data.setProPriceLimitText(obj[15]==null?"":obj[15].toString());
				flist.add(data);
			}
		}
		return flist;
	}
	
	
	
	/**
	 * 
	 *@category 查询配送关系日志列表
	 *@author 邱磊
	 *@date 2015年6月18日 上午11:21:20
	 *@param page
	 *@return
	 */
	@SuppressWarnings("unchecked")
	public Pagination getBaseDelByCompLogList(Pagination page){
		page = baseGoodsDao.getBaseDelByCompLogList(page);
		page.setRows(formateDel((List<Object[]>) page.getRows()));
		return page;
	}
	@SuppressWarnings("unchecked")
	public Pagination getSetDelComp(Pagination page){
		page = baseGoodsDao.getSetDelComp(page);
		page.setRows(formateSetDelComp((List<Object[]>) page.getRows()));
		return page;
	}
	
	public Pagination getBaseDelerationLogList(Pagination page){
		page = baseGoodsDao.getBaseDelerationLogList(page);
		List<Map<String, Object>> list = (List<Map<String, Object>>) page.getRows();
		if (null != list && list.size() > 0){
			for (int i = 0; i < list.size(); i++){
				Map<String, Object> map = list.get(i);
				map.put("status", map.get("status")==null?"":ConstantsUtil.delStatus(map.get("status").toString()));
				map.put("updTime", map.get("updTime")==null?"":ParseDate.parseFullFormat(ParseDate.fromFullFormat(map.get("updTime").toString())));
			}
		}
		return page;
	}
	public Pagination getDelComp(Pagination page){
		page = baseGoodsDao.getDelComp(page);
		return page;
	}
	@Override
	public Pagination getDelCompByLinxuan(Pagination page){
		return baseGoodsDao.getDelCompByLinxuan(page);
	}
	public Pagination getDelArea(Pagination page){
		page = baseGoodsDao.getDelArea(page);
		return page;
	}
	
	@Override
	public Pagination getDelAreaByLinxuan(Pagination page){
		return baseGoodsDao.getDelAreaByLinxuan(page);
	}
	public Pagination getSetDelArea(Pagination page){
		page = baseGoodsDao.getSetDelArea(page);
		List<Map<String, Object>> list = (List<Map<String, Object>>)page.getRows();
		for (int i = 0; i < list.size(); i++){
			Map<String, Object> map = list.get(i);
			map.put("status", map.get("status")==null?"":ConstantsUtil.delStatus(map.get("status").toString()));
		}
		return page;
	}
	public Pagination getSetDelAreaLog(Pagination page){
		page = baseGoodsDao.getSetDelAreaLog(page);
		List<Map<String, Object>> list = (List<Map<String, Object>>)page.getRows();
		for (int i = 0; i < list.size(); i++){
			Map<String, Object> map = list.get(i);
			map.put("status", map.get("status")==null?"":ConstantsUtil.delStatus(map.get("status").toString()));
			map.put("updDatetime", map.get("updDatetime")==null?"":ParseDate.parseFullFormat(ParseDate.fromFullFormat(map.get("updDatetime").toString())));
		}
		page.setRows(list);
		return page;
	}
	
	private List<DicAreaForm> formatSetDelArea(List<Object[]> list){
		List<DicAreaForm> flist = new ArrayList<DicAreaForm>();
		if (null != list && list.size() > 0){
			for (int i = 0; i < list.size(); i++){
				DicAreaForm data = new DicAreaForm();
				Object[] obj = list.get(i);
				data.setDelRelId(obj[0]==null?"":obj[0].toString());
				data.setAreaId(obj[1]==null?"":obj[1].toString());
				data.setAreaName(obj[2]==null?"":obj[2].toString());
				data.setFatherAreaCode(obj[3]==null?"":obj[3].toString());
				data.setFatherAreaName(obj[4]==null?"":obj[4].toString());
				data.setStatusText(obj[5]==null?"":ConstantsUtil.delStatus(obj[5].toString()));
				flist.add(data);
			}
		}
		return flist;
	}
	
	private List<BaseDelrelationForm> formateDelComp(List<Object[]> list){
		List<BaseDelrelationForm> flist = new ArrayList<BaseDelrelationForm>();
		if (null != list && list.size() > 0){
			for (int i = 0; i < list.size(); i++){
				BaseDelrelationForm data = new BaseDelrelationForm();
				Object[] obj = list.get(i);
				data.setCompId(obj[0]==null?"":obj[0].toString());
				data.setCompCode(obj[1]==null?"":obj[1].toString());
				data.setCompName(obj[2]==null?"":obj[2].toString());
				data.setOrgCode(obj[3]==null?"":obj[3].toString());
				data.setContactName(obj[4]==null?"":obj[4].toString());
				data.setContactPhone(obj[5]==null?"":obj[5].toString());
				data.setCount(obj[6]==null?"0":obj[6].toString());
				flist.add(data);
			}
		}
		return flist;
	}
	
	private List<BaseDelrelationForm> formateSetDelCompLog(List<Object[]> list){
		List<BaseDelrelationForm> flist = new ArrayList<BaseDelrelationForm>();
		if (null != list && list.size() > 0){
			for (int i = 0; i < list.size(); i++){
				BaseDelrelationForm data = new BaseDelrelationForm();
				Object[] obj = list.get(i);
				data.setCompCode(obj[0]==null?"":obj[0].toString());
				data.setCompName(obj[1]==null?"":obj[1].toString());
				data.setOrgCode(obj[2]==null?"":obj[2].toString());
				data.setContactName(obj[3]==null?"":obj[3].toString());
				data.setContactPhone(obj[4]==null?"":obj[4].toString());
				data.setStatus(obj[5]==null?"":ConstantsUtil.delStatus(obj[5].toString()));
				data.setUpdTime(obj[6]==null?"":ParseDate.parseFullFormat(ParseDate.fromFullFormat(obj[6].toString())));
				flist.add(data);
			}
		}
		return flist;
	}
	
	private List<BaseDelrelationForm> formateSetDelComp(List<Object[]> list){
		List<BaseDelrelationForm> flist = new ArrayList<BaseDelrelationForm>();
		if (null != list && list.size() > 0){
			for (int i = 0; i < list.size(); i++){
				BaseDelrelationForm data = new BaseDelrelationForm();
				Object[] obj = list.get(i);
				data.setDelRelId(obj[0]==null?"":obj[0].toString());
				data.setCompCode(obj[1]==null?"":obj[1].toString());
				data.setCompName(obj[2]==null?"":obj[2].toString());
				data.setOrgCode(obj[3]==null?"":obj[3].toString());
				data.setContactName(obj[4]==null?"":obj[4].toString());
				data.setContactPhone(obj[5]==null?"":obj[5].toString());
				data.setStatus(obj[6]==null?"":ConstantsUtil.delStatus(obj[6].toString()));
				flist.add(data);
			}
		}
		return flist;
	}
public int getAreaDelCount(String areaCode,String goodsCode){
		return baseGoodsDao.getAreaDelCount(areaCode,goodsCode);
	}
public int getAreaMaxDelCount(){
	return baseGoodsDao.getAreaMaxDelCount();
}
	private List<BaseGoods> formateDel(List<Object[]> list){
		List<BaseGoods> flist = new ArrayList<BaseGoods>();
		if (null != list && list.size() > 0){
			for (int i = 0; i < list.size(); i++){
				Object[] obj = list.get(i);
				BaseGoods data = new BaseGoods();
				data.setDelRelId(obj[0]==null?"":obj[0].toString());
				data.setGoodsCode(obj[1]==null?"":obj[1].toString());
				data.setDrugName(obj[2]==null?"":obj[2].toString());
				data.setDrugCode(obj[3]==null?"":obj[3].toString());
				data.setCompName(obj[4]==null?"":obj[4].toString());
				data.setAreaName(obj[5]==null?"":obj[5].toString());
				data.setFormName(obj[6]==null?"":obj[6].toString());
				data.setSpecName(obj[7]==null?"":obj[7].toString());
				data.setFactor(obj[8]==null?"":obj[8].toString());
				data.setUnit(obj[9]==null?"":obj[9].toString());
				data.setDrugCat(obj[10]==null?"":DicSysUtil.getValueByClassCodeAndDicCode(Constants.DRUG_CAT, obj[10].toString()));
				data.setStatusText(obj[11]==null?"":ConstantsUtil.delStatus(obj[11].toString()));
				data.setProjId(obj[12]==null?"":obj[12].toString());
				data.setProjectName(obj[13]==null?"":obj[13].toString());
				data.setMaterialName(obj[14]==null?"":obj[14].toString());
				data.setProPriceLimit(Double.parseDouble(obj[15]==null?"":obj[15].toString()));
				data.setDrugId(obj[16]==null?"":obj[16].toString());
				data.setProdPompId(obj[17]==null?"":obj[17].toString());
				flist.add(data);
			}
		}
		return flist;
	}
	/**
	 * 
	 *@category 封装地区List
	 *@author 邱磊
	 *@date 2015年6月17日 下午9:11:01
	 *@param list
	 *@return
	 */
	private List<DicAreaForm> formatDic(List<Object[]> list){
    	if (null != list && list.size() >0){
    		List<DicAreaForm> flist = new ArrayList<DicAreaForm>();
    		for (int i = 0; i < list.size(); i ++){
    			flist.add(formartForm(list.get(i)));
    		}
    		return flist;
    	}
    	return null;
    }
	/**
	 * 
	 *@category 封装地区信息
	 *@author 邱磊
	 *@date 2015年6月17日 下午9:11:19
	 *@param data
	 *@return
	 */
	private DicAreaForm formartForm(Object[] obj){
		if (null == obj){
			return null;
		}
		DicAreaForm form = new DicAreaForm();
		form.setAreaId(obj[0]==null?"":obj[0].toString());
		form.setAreaName(obj[1]==null?"":obj[1].toString());
		form.setFatherAreaCode(obj[2]==null?"":obj[2].toString());
		form.setFatherAreaName(obj[3]==null?"":obj[3].toString());
		form.setDelCompCount(obj[4]==null?"":obj[4].toString());
		return form;
	}
	/**
	 * 
	 *@category 封装商品信息
	 *@author 邱磊
	 *@date 2015年6月17日 下午9:11:34
	 *@param list
	 *@return
	 */
	private List<BaseGoods> fromateData(List<Object[]> list){
		List<BaseGoods> flist = new ArrayList<BaseGoods>();
		if (null != list && list.size() > 0){
			for (int i = 0; i < list.size(); i++){
				BaseGoods data = new BaseGoods();
				Object[] obj = list.get(i);
				data.setGoodsCode(obj[0]==null?"":obj[0].toString());
				data.setDrugCode(obj[1]==null?"":obj[1].toString());
				data.setDrugName(obj[2]==null?"":obj[2].toString());
				data.setFormName(obj[3]==null?"":obj[3].toString());
				data.setSpecName(obj[4]==null?"":obj[4].toString());
				data.setFactor(obj[5]==null?"":obj[5].toString());
				data.setUnit(obj[6]==null?"":obj[6].toString());
				data.setDrugSource(DicSysUtil.getValueByClassCodeAndDicCode(Constants.DRUG_SOURCE, obj[7]==null?"":obj[7].toString()));
				data.setProjectName(obj[8]==null?"":obj[8].toString());
				data.setProjId(obj[9]==null?"":obj[9].toString());
				data.setMaterialName(obj[10]==null?"":obj[10].toString());
				data.setProPriceLimit(Double.parseDouble(obj[11]==null?"":obj[11].toString()));
				data.setDrugId(obj[7]==null?"":obj[7].toString());
				flist.add(data);
			}
		}
		return flist;
	}
	/**
	 * 
	 *@category 封装配送企业构信息
	 *@author 邱磊
	 *@date 2015年6月17日 下午9:11:54
	 *@param list
	 *@return
	 */
	private List<StdCompInfoForm> fromateCompData(List<Object[]> list){
		List<StdCompInfoForm> flist = new ArrayList<StdCompInfoForm>();
		if (null != list && list.size() > 0){
			for (int i = 0; i < list.size(); i++){
				StdCompInfoForm data = new StdCompInfoForm();
				Object[] obj = list.get(i);
				data.setCompId(obj[0]==null?"":obj[0].toString());
				data.setCompCode(obj[1]==null?"":obj[1].toString());
				data.setCompName(obj[2]==null?"":obj[2].toString());
				data.setOrgCode(obj[3]==null?"":obj[3].toString());
				data.setContactName(obj[4]==null?"":obj[4].toString());
				data.setCompPhone(obj[5]==null?"":obj[5].toString());
				flist.add(data);
			}
		}
		return flist;
	}
	/**
	 * 
	 *@category 获取商品导入文件列表
	 *@author 邱磊
	 *@date 2015年11月11日 下午6:37:35
	 *@param
	 */
	public Pagination getImportFileDataList(Pagination page){
		page = sfmanager.getImportFileDataList(page);
		return page;
	}
	/**
	 * 
	 *@category 获取预览列表
	 *@author 邱磊
	 *@date 2015年11月12日 上午8:32:59
	 *@param
	 */
	public Pagination getImportGoodsView(Pagination page){
		page = baseGoodsDao.getImportGoodsView(page);
		return page;
	}
	public int importGoods(String fileId){
		return baseGoodsDao.importGoods(fileId);
	}
	public void deleteImportGoods(String fileId){
		baseGoodsDao.deleteImportGoods(fileId);
		sfmanager.updateImportFileStatus(Constants.WENJIAN_STATUS_FANGQIDAORU, fileId);
	}
	public Pagination checkReImport(Pagination page){
		List<Map<String, Object>> list = baseGoodsDao.checkReImport(page);
		if (null != list && list.size() > 0){
			Map<String, Object> map = list.get(0);
			if (ParseNumber.toLong(map.get("drugCount").toString()) > 0) {
				page.setMsg("本次导入的" + map.get("importCount").toString() + "条商品中有" + map.get("drugCount").toString() + "条已存在项目中，是否确定导入！");
			}
		}
		return page;
	}
	public Map<String, Object> getGoodsByCode(String goodsCode){
		return baseGoodsDao.getGoodsByCode(goodsCode);
	}

	@Override
	public Pagination getProjDrugList(Pagination page) {
		return baseGoodsDao.getProjDrugList(page);
	}

	@Override
	public boolean isDelrelation(Pagination page) {
		return baseGoodsDao.isDelrelation(page);
	}
	
	/**
	 * 
	 *@category 获取配送企业列表
	 *@author wangbing
	 *@date 2015年11月12日 上午8:32:59
	 *@param
	 */
	@Override
	public Pagination getTheDelCompList(Pagination page){
		return baseGoodsDao.getTheDelCompList(page);
	}
	
	/**
	 * 
	 *@category 获取已设置医疗机构列表
	 *@author wangbing
	 *@date 2015年11月12日 上午8:32:59
	 *@param
	 */
	@SuppressWarnings("unchecked")
	@Override
	public Pagination getDelRelationHospList(Pagination page){
		List<Map<String,Object>> list = (List<Map<String, Object>>) baseGoodsDao.getDelRelationHospList(page).getRows();
		for(Map<String,Object> data : list){
			data.put("del_range", data.get("del_range") == null ? "" : ConstantsUtil.delRange(data.get("del_range").toString()));
			data.put("status", data.get("status") == null ? "" : ConstantsUtil.delStatus(data.get("status").toString()));
		}
		return page;
	}
	@Override
	public Pagination getDelCompList(Pagination page) {
		return baseGoodsDao.getDelCompList(page);
	}

	@Override
	public Pagination getHospList(Pagination page) {
		return baseGoodsDao.getHospList(page);
	}

	@Override
	public Pagination getHospJspList(Pagination page) {
		return baseGoodsDao.getHospJspList(page);
	}

	@Override
	public Pagination getCompJspList(Pagination page) {
		return baseGoodsDao.getCompJspList(page);
	}


	@Override
	public Pagination getDelHospJspList(Pagination page) {
		return baseGoodsDao.getDelHospJspList(page);
	}

	@Override
	public Pagination getDelCompJspList(Pagination page) {
		return baseGoodsDao.getDelCompJspList(page);
	}

	@Override
	public Pagination getTheDelCompListByLinxuan(Pagination page) {
		return baseGoodsDao.getTheDelCompListByLinxuan(page);
	}

	@SuppressWarnings("unchecked")
	@Override
	public Pagination getDelRelationHospLog(Pagination page) {
		List<Map<String,Object>> list = (List<Map<String, Object>>) baseGoodsDao.getDelRelationHospLog(page).getRows();
		for(Map<String,Object> data : list){
			data.put("del_range", data.get("del_range") == null ? "" : ConstantsUtil.delRange(data.get("del_range").toString()));
			data.put("status", data.get("status") == null ? "" : ConstantsUtil.delStatus(data.get("status").toString()));
			data.put("upd_datetime", data.get("upd_datetime") == null ? "" : DateUtil.dateTime((Timestamp)data.get("upd_datetime")));
		}
		return page;
	}
	
	/**
	 * 
	 *@category 获取未设置配送关系医疗机构列表
	 *@author wangbing
	 *@date 2015年11月12日 上午8:32:59
	 *@param
	 */
	@SuppressWarnings("unchecked")
	@Override
	public Pagination getNoSetDelRelHospList(Pagination page){
		List<Map<String,Object>> list = (List<Map<String, Object>>) baseGoodsDao.getNoSetDelRelHospList(page).getRows();
		for(Map<String,Object> data : list){
			data.put("hosp_classify", data.get("hosp_classify") == null ? "" : ConstantsUtil.delRange(data.get("hosp_classify").toString()));
		}
		return page;
	}
	
	/**
	 * 
	 *@category 获取未设置配送关系医疗机构列表(遴选)
	 *@author wangbing
	 *@date 2015年11月12日 上午8:32:59
	 *@param
	 */
	@SuppressWarnings("unchecked")
	@Override
	public Pagination getNoSetDelRelHospListByLinxuan(Pagination page){
		List<Map<String,Object>> list = (List<Map<String, Object>>) baseGoodsDao.getNoSetDelRelHospListByLinxuan(page).getRows();
		for(Map<String,Object> data : list){
			data.put("hosp_classify", data.get("hosp_classify") == null ? "" : ConstantsUtil.delRange(data.get("hosp_classify").toString()));
		}
		return page;
	}
	
	/**
	 * 
	 *@category 根据配送企业设置医疗机构
	 *@author wangbing
	 *@date 2015年6月17日 下午4:58:22
	 *@return
	 */
	@Override
	public int setHospByDelComp(List<Map<String,String>> list,String updUser){
		return baseGoodsDao.setHospByDelComp(list, updUser);
	}
	
		@Override
	public void setDelWithHosp(Pagination page) {
		 baseGoodsDao.setDelWithHosp(page);
	}

	@Override
	public void setDelWithComp(Pagination page) {
		 baseGoodsDao.setDelWithComp(page);
	}

	@Override
	public Pagination getDelCompListByLinxuan(Pagination page) {
		 return baseGoodsDao.getDelCompListByLinxuan(page);
	}

	

	@Override
	public Pagination getDelRelHospLog(Pagination page) {
		 return baseGoodsDao.getDelRelLog(page);
	}

	@Override
	public Pagination getDelRelCompLog(Pagination page) {
		 return baseGoodsDao.getDelRelLog(page);
	}
	public Pagination getHaveSetDel(Pagination page){
		return baseGoodsDao.getHaveSetDel(page);
	}
	public void batchDeleteHaveSetDel(String goodsCode,List<BaseDelrelationForm> list,String userId){
		if (null != list && list.size() > 0){
			List<String> pl = new ArrayList<String>();
			for (int i = 0; i < list.size(); i++){
				BaseDelrelationForm form = list.get(i);
				pl.add(form.getCompCode());
			}
			baseGoodsDao.batchDeleteHaveSetDel(goodsCode,pl,userId);
		}
	}
	public Pagination getGoodsSelectComp(Pagination page){
		return baseGoodsDao.getGoodsSelectComp(page);
	}
	public void setBaseDelRelation(String goodsCode,List<BaseDelrelationForm> list,String userId,String gzfjydel){
		if (null != list && list.size() > 0){
//			List<String> pl = new ArrayList<String>();
//			List<String> plid = new ArrayList<String>();
//			for (int i = 0; i < list.size(); i++){
//				BaseDelrelationForm form = list.get(i);
//				pl.add(form.getCompCode());
//				plid.add(UUID.randomUUID().toString());
//			}
			baseGoodsDao.setBaseDelRelation(goodsCode,list,userId,gzfjydel);
		}
	}
	
	/**
	 * @category 保存不竞不限药品信息
	 * @author 韩守松
	 * @date   2016年1月13日
	 * @param  @param goods
	 */
	public void save(BaseGoods goods,SysUser user){
		Session session = factory.getCurrentSession();
		Transaction tran = session.getTransaction();
		try {
			tran.begin();
			baseGoodsDao.save(goods,user);
			tran.commit();
		} catch (Exception e) {
			e.printStackTrace();
			tran.rollback();
		}
	}
	
	/**
	 * @category 获取不竞不限商品数据信息
	 * @author 韩守松
	 * @date   2016年1月14日
	 * @param  @param page
	 * @param  @param data
	 * @param  @return
	 */
	@SuppressWarnings("unchecked")
	public Pagination getNoJNoXGoodsData(Pagination page,DrugNoJNoX data){
		page = baseGoodsDao.getNoJNoXGoodsData(page,data);
		List<Map<String,Object>> list = (List<Map<String, Object>>) page.getRows();
		if(list.size() > 0){
			for(int i=0;i<list.size();i++){
				list.get(i).put("goodsStatus", list.get(i).get("goodsStatus")==null?null:Status.getName(Integer.valueOf(list.get(i).get("goodsStatus").toString())));
			}
		}
		
		return page;
	}
}	
